/*
 * @lc app=leetcode.cn id=20 lang=cpp
 *
 * [20] 有效的括号
 */

// @lc code=start
#include <string>
#include <list>
#include <unordered_map>
using namespace std;
class Solution
{
public:
    bool isValid(string s)
    {
        //根据进出栈，右括号匹配最近的左括号，最后看栈是否为空即可
        unordered_map<char, char> map = {{'}', '{'}, {')', '('}, {']', '['}};
        list<char> l{};
        for (size_t i = 0; i < s.length(); i++)
        {
            if (l.empty())
            {
                l.push_back(s[i]);

                continue;
            }
            if (l.back() == map[s[i]]) // 值得注意的是，这里l如果为list<int>类型，其仍然可以相等，比如这里'{'==123仍然为true，因为123就是'{'的ASCLL码
            {
                l.pop_back();
                continue;
            }
            l.push_back(s[i]);
        }
        return l.empty();
    }
};
// @lc code=end
